Skip to content

Conversation

@machichima
Copy link
Collaborator

@machichima machichima commented Oct 30, 2025

Why are these changes needed?

Support cron job scheduling. Following this design docs and implement milestone 1 in this PR

Main changes:

  • Add RayCronJob CRD and controller
  • Add feature gate for enabling RayCronJob
  • Add unit test

Test

Apply the sample YAML ray-operator/config/samples/ray-cronjob.sample.yaml. RayJobs are being scheduled every minute:

image

Trigger validation error

image

Related issue number

Following comment: #2426 (comment)

Closes #2426

Checks

  • I've made sure the tests are passing.
  • Testing Strategy
    • Unit tests
    • Manual tests
    • This PR is not tested :(

@machichima machichima changed the title [POC] Add Ray Cron Job [Feat] Add Ray Cron Job Nov 24, 2025
@machichima machichima marked this pull request as ready for review November 24, 2025 13:03
@CheyuWu CheyuWu self-requested a review November 24, 2025 17:01
Comment on lines +11 to +16
type RayCronJobSpec struct {
// JobTemplate defines the job spec that will be created by cron scheduling
JobTemplate *RayJobSpec `json:"jobTemplate"`
// Schedule is the cron schedule string
Schedule string `json:"schedule"`
}
Copy link
Collaborator

@win5923 win5923 Nov 26, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if this is alright, but I think we should introduce a separate struct (e.g. RayJobTemplateSpec) to hold both the metadata and the spec for the generated RayJob, similar to how Kubernetes models JobTemplateSpec in CronJob.

This would allow users to specify metadata inside jobTemplate, which we can then propagate to the created RayJob. It also keeps the API aligned with common Kubernetes patterns.

WDYT?

Reference:
https://github.com/kubernetes/kubernetes/blob/af9fb799ef09bbdb0b2b40b4e441f2ffccaffe18/pkg/apis/batch/types.go#L94-L105

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Not sure if we want this. In RayJobSpec when we specify the RayClusterSpec, we only set RayClusterSpec itself rather than also letting user set the ObjectMeta.

RayClusterSpec *RayClusterSpec `json:"rayClusterSpec,omitempty"`

cc @rueian for confirmation.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

No need for it at the moment, this can be a future work.

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The current structure looks good to me already.

Comment on lines +44 to +45
rayVersion: '2.46.0' # should match the Ray version in the image of the containers
# Ray head pod template
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can we use 2.52.0 version? thank you!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Feature] Support cron scheduling for RayJob

4 participants